package com.xuxueli.applyModules.mapper;
import com.xuxueli.applyModules.entity.HxPartitionParam;
import com.xuxueli.applyModules.entity.HxPartition;
import com.xuxueli.applyModules.entity.UserPartitions;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * HxPartition
 */
@Mapper
public interface HxPartitionMapper{
    /**
     * 查询获取数据
     * @return
     */
    List<HxPartition> getList(HxPartitionParam hxPartitionParam);

    /**
     * 新增分区
     * @param hxPartitionParam
     */
    void addPartition(HxPartitionParam hxPartitionParam);
    /**
     * 根据条件查询对应的分区是否存在
     * @param partitionName
     * @param cavMark
     * @return
     */
    List<UserPartitions> getPartitionByParam(@Param("partitionName") String partitionName, @Param("cavMark") String cavMark);

    void addPartitionByEmsNo(HxPartitionParam hxPartitionParam);

    /**
     * 获取是否创建过主分区
     * @param masterTableName
     * @param oracleMasterTableName
     * @param cavMark
     * @return 1:存在 0/null:不存在
     */
    Integer selectMasterPartitionExist(@Param("masterTableName") String masterTableName, @Param("oracleMasterTableName") String oracleMasterTableName,
                                       @Param("cavMark") String cavMark);

    /**
     * pg库 创建子表
     * @param hxPartitionParam
     */
    void createSubTable(HxPartitionParam hxPartitionParam);

    int selectMainCount(@Param("tableName") String tableName,
                        @Param("mainValue") String mainValue,
                        @Param("mainPrefix") String mainPrefix);

    int selectSubCount(@Param("tableName") String tableName,
                       @Param("mainValue") String mainValue,
                       @Param("subValue") String subValue,
                       @Param("mainPrefix") String mainPrefix,
                       @Param("subPrefix") String subPrefix);

    void createSubPartition(@Param("tableName") String tableName,
                            @Param("mainValue") String mainValue,
                            @Param("subValue") String subValue,
                            @Param("mainPrefix") String mainPrefix,
                            @Param("subPrefix") String subPrefix,
                            @Param("subColumn") String subColumn,
                            @Param("mainCount") int mainCount);

    /**
     * 平衡表创建子分区
     * @param tableName
     * @param mainValue
     * @param mainUpperValue
     * @param subValue
     * @param mainPrefix
     * @param subPrefix
     * @param subColumn
     * @param mainCount
     */
    void createCalcSubPartition(@Param("tableName") String tableName,
                                @Param("mainValue") String mainValue,
                                @Param("mainUpperValue") String mainUpperValue,
                                @Param("subValue") String subValue,
                                @Param("mainPrefix") String mainPrefix,
                                @Param("subPrefix") String subPrefix,
                                @Param("subColumn") String subColumn,
                                @Param("mainCount") int mainCount);

    /**
     * pg库卸载分区
     * @param map
     */
    void detachPartition(Map<String, Object> map);

    /**
     * 删除分区
     * @param map
     */
    void deletePartition(Map<String, Object> map);
}